/* * Copyright (c) 2009, 2012 IBM Corp. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Dave Locke - initial API and implementation and/or initial documentation */ package org.eclipse.paho.client.mqttv3.internal; import java.io.IOException; //import javax.net.ssl.SSLSocket; //m2mgo //import javax.net.ssl.SSLSocketFactory;//m2mgo import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.internal.trace.Trace; import com.m2mgo.net.SSLSocketFactory; /** * A network module for connecting over SSL. */ public class SSLNetworkModule extends TCPNetworkModule { private String[] enabledCiphers; private int handshakeTimeoutSecs; /** * Constructs a new SSLNetworkModule using the specified host and * port. The supplied SSLSocketFactory is used to supply the network * socket. */ public SSLNetworkModule(Trace trace, SSLSocketFactory factory, String host, int port) { super(trace, factory, host, port); } /** * Returns the enabled cipher suites. */ public String[] getEnabledCiphers() { return enabledCiphers; } /** * Sets the enabled cipher suites on the underlying network socket. */ public void setEnabledCiphers(String[] enabledCiphers) { // this.enabledCiphers = enabledCiphers; //m2mgo // if ((socket != null) && (enabledCiphers != null)) { // if (trace.isOn()) { // String ciphers = ""; // for (int i=0;i<enabledCiphers.length;i++) { // if (i>0) { // ciphers+=","; // } // ciphers+=enabledCiphers[i]; // } // //@TRACE 260=setEnabledCiphers ciphers={0} // trace.trace(Trace.FINE,260,new Object[]{ciphers}); // } // ((SSLSocket) socket).setEnabledCipherSuites(enabledCiphers); // } } public void setSSLhandshakeTimeout(int timeout) { this.handshakeTimeoutSecs = timeout; } public void start() throws IOException, MqttException { super.start(); // setEnabledCiphers(enabledCiphers); //m2mgo // int soTimeout = socket.getSoTimeout(); // if ( soTimeout == 0 ) { // // RTC 765: Set a timeout to avoid the SSL handshake being blocked indefinitely // socket.setSoTimeout(this.handshakeTimeoutSecs*1000); // } // ((SSLSocket)socket).startHandshake(); // // reset timeout to default value // socket.setSoTimeout(soTimeout); } }